package Data_Structure.MapAndSet;

/**
 * @className: Demo
 * @author: 芃
 * @description: HashMap底层实现
 * @date: 2023/8/28 11:23
 */
public class Demo {
    /*
    默认容量是16，即默认数组长度为16。
    最大容量为2^30
    默认的负载因子 0.75 即有效数据个数/数组长度
    链表树化的条件① 链表长度超过8
    链表树化的条件② 数组的长度超过（》=）64
    非树化的条件 链表长度小于6
    1、new HashMap(19),bucket数组多大？
    接近给定数值的2的次幂，向上取整，此例子为32->2^5
    2、HashMap什么时候开辟Bucket数组占用内存？
    ①、调用不带参数的构造方法时，实际上并没有开辟内存，负载因子默认赋值为0.75
    ②、当给定参数且指定容量的时候，返回一个最接近二次幂的数组容量
    第一次调用put的时候，才会真正为数组开辟内存，默认为16
    3、HashMap什么时候扩容？
    当负载因子超过指定的值时，就会进行数组扩容，进行重新哈希
    怎么个哈希法？将原数组当中的node都拿出来，重新哈希到新的数组当中。
    扩容为2倍扩容。
    4、当两个对象的hashCode相同会发生什么？发生冲突
    5、如果两个键的hashCode相同，你如何获取值对象？
    遍历HashCode值相等时相连的链表，直到相等或者null
    6、你了解重新调整HashMap大小存在什么问题吗？
    重新哈希原来的元素，到新的链表当中
    好*/
}
